library(tidyverse)
library(shinydashboardPlus)
library(shinydashboard)
library(plotly)

sourceDirectory <- function(pathToFolder=paste(getwd(),"/R/",sep = "")){
  for (x in list.files(pathToFolder)){
    source(file.path(pathToFolder, x))}}

if(xfun::dir_exists("R")==TRUE){
  sourceDirectory()
  print(".R directory found and sourced")
}else{
  print("No .R directory found")}
[1] ".R directory found and sourced"
Lens1 <- advancedLensPrep(Data = LensSQL_file1 , ComponentSplit = "Group")
Lens2 <- advancedLensPrep(Data = LensSQL_file2 , ComponentSplit = "Group")

Cyber1 <- advancedCyberPrep(Data = CyberAdv_file1 , ComponentSplit = "Package")
data_frame("A" = c(0,0,0,0,1,0,6) ,"B" = c(0,0,0,1,0,5,0), "C" = c(0,0,1,0,4,0,15),
                                      "D" = c(0,1,0,3,0,10,0),"E" = c(1,0,2,0,6,0,20),"F" = c(0,1,0,3,0,10,0),
                                      "G" = c(0,0,1,0,4,0,15),"H" = c(0,0,0,1,0,5,0), "I" = c(0,0,0,0,1,0,6))
Lens1GroupSubset <- Lens1 %>% filter(Package %in% list(4,5,6))
Lens1GrpSubCompSumm <- Lens1GroupSubset%>%group_by(BoardNo,Location)%>%
    dplyr::summarise("PosX(mm)"=mean(`PosX(mm)`),"PosY(mm)"=mean(`PosY(mm)`),"Package"=mean(Package),count =n())
`summarise()` has grouped output by 'BoardNo'. You can override using the `.groups` argument.
Graph <- ggplot(data = Lens1GrpSubCompSumm, mapping = aes(x = `PosX(mm)`,y = `PosY(mm)`, label = `Location`)) + 
  #geom_point() + 
  geom_text(aes(color=factor(`Package`)),size=4,check_overlap = TRUE)
#Graph
ggplotly(Graph)
testList <- as.list(sort(unique(Lens1$Package)))
LS0tDQp0aXRsZTogIkhlYXRtQXBwIFRlc3QgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBMaWJyYXJpZXN9DQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShzaGlueWRhc2hib2FyZFBsdXMpDQpsaWJyYXJ5KHNoaW55ZGFzaGJvYXJkKQ0KbGlicmFyeShwbG90bHkpDQoNCmBgYA0KDQpgYGB7ciBMb2FkIEZ1bmN0aW9uc30NCg0Kc291cmNlRGlyZWN0b3J5IDwtIGZ1bmN0aW9uKHBhdGhUb0ZvbGRlcj1wYXN0ZShnZXR3ZCgpLCIvUi8iLHNlcCA9ICIiKSl7DQogIGZvciAoeCBpbiBsaXN0LmZpbGVzKHBhdGhUb0ZvbGRlcikpew0KICAgIHNvdXJjZShmaWxlLnBhdGgocGF0aFRvRm9sZGVyLCB4KSl9fQ0KDQppZih4ZnVuOjpkaXJfZXhpc3RzKCJSIik9PVRSVUUpew0KICBzb3VyY2VEaXJlY3RvcnkoKQ0KICBwcmludCgiLlIgZGlyZWN0b3J5IGZvdW5kIGFuZCBzb3VyY2VkIikNCn1lbHNlew0KICBwcmludCgiTm8gLlIgZGlyZWN0b3J5IGZvdW5kIil9DQpgYGANCg0KYGBge3IgTG9hZCBEYXRhLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1UUlVFLCB3YXJuaW5nPUZBTFNFfQ0KDQojQ1NWbGlzdCA8LSBhcy5saXN0KGRpcigicmVzb3VyY2VzL1Rlc3REYXRhIikpDQoNCiNsZW5zU3RhbmRhcmRPdXRwdXQgPC0gcmVhZF9jc3YoInJlc291cmNlcy9UZXN0RGF0YS9sZW5zU3RhbmRhcmRPdXRwdXQuY3N2IikNCg0KTGVuc1NRTF9maWxlMSA8LSByZWFkX2NzdigicmVzb3VyY2VzL1Rlc3REYXRhL1J1bjFfTGVuc1NRTC5jc3YiKQ0KTGVuc1NRTF9maWxlMiA8LSByZWFkX2NzdigicmVzb3VyY2VzL1Rlc3REYXRhL1NRTDIzOTktNDAwYmxpc3RyZTIuY3N2IikNCg0KQ3liZXJBZHZfZmlsZTEgPC0gcmVhZF9jc3YoInJlc291cmNlcy9UZXN0RGF0YS9SdW4yX0FkdmFuY2VkQ3liZXIuY3N2Iixjb2xfdHlwZXMgPSBjb2xzKFBhbmVsSWQgPSBjb2xfbnVtYmVyKCkpKQ0KYGBgDQoNCmBgYHtyIFByb2Nlc3MgRGF0YX0NCkxlbnMxIDwtIGFkdmFuY2VkTGVuc1ByZXAoRGF0YSA9IExlbnNTUUxfZmlsZTEgLCBDb21wb25lbnRTcGxpdCA9ICJHcm91cCIpDQpMZW5zMiA8LSBhZHZhbmNlZExlbnNQcmVwKERhdGEgPSBMZW5zU1FMX2ZpbGUyICwgQ29tcG9uZW50U3BsaXQgPSAiR3JvdXAiKQ0KDQpDeWJlcjEgPC0gYWR2YW5jZWRDeWJlclByZXAoRGF0YSA9IEN5YmVyQWR2X2ZpbGUxICwgQ29tcG9uZW50U3BsaXQgPSAiUGFja2FnZSIpDQpgYGANCg0KYGBge3J9DQpkYXRhX2ZyYW1lKCJBIiA9IGMoMCwwLDAsMCwxLDAsNikgLCJCIiA9IGMoMCwwLDAsMSwwLDUsMCksICJDIiA9IGMoMCwwLDEsMCw0LDAsMTUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRCIgPSBjKDAsMSwwLDMsMCwxMCwwKSwiRSIgPSBjKDEsMCwyLDAsNiwwLDIwKSwiRiIgPSBjKDAsMSwwLDMsMCwxMCwwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkciID0gYygwLDAsMSwwLDQsMCwxNSksIkgiID0gYygwLDAsMCwxLDAsNSwwKSwgIkkiID0gYygwLDAsMCwwLDEsMCw2KSkNCmBgYA0KDQpgYGB7cn0NCkxlbnMxR3JvdXBTdWJzZXQgPC0gTGVuczEgJT4lIGZpbHRlcihQYWNrYWdlICVpbiUgbGlzdCg0LDUsNikpDQpMZW5zMUdycFN1YkNvbXBTdW1tIDwtIExlbnMxR3JvdXBTdWJzZXQlPiVncm91cF9ieShMb2NhdGlvbixCb2FyZE5vKSU+JQ0KICAgIGRwbHlyOjpzdW1tYXJpc2UoIlBvc1gobW0pIj1tZWFuKGBQb3NYKG1tKWApLCJQb3NZKG1tKSI9bWVhbihgUG9zWShtbSlgKSwiUGFja2FnZSI9bWVhbihQYWNrYWdlKSxjb3VudCA9bigpKQ0KYGBgDQoNCmBgYHtyfQ0KR3JhcGggPC0gZ2dwbG90KGRhdGEgPSBMZW5zMUdycFN1YkNvbXBTdW1tLCBtYXBwaW5nID0gYWVzKHggPSBgUG9zWChtbSlgLHkgPSBgUG9zWShtbSlgLCBsYWJlbCA9IGBMb2NhdGlvbmApKSArIA0KICAjZ2VvbV9wb2ludCgpICsgDQogIGdlb21fdGV4dChhZXMoY29sb3I9ZmFjdG9yKGBQYWNrYWdlYCkpLHNpemU9NCxjaGVja19vdmVybGFwID0gVFJVRSkNCiNHcmFwaA0KZ2dwbG90bHkoR3JhcGgpDQpgYGANCg0KYGBge3J9DQp0ZXN0TGlzdCA8LSBhcy5saXN0KHNvcnQodW5pcXVlKExlbnMxJFBhY2thZ2UpKSkNCg0KYGBgDQoNCmBgYHtyfQ0KDQpgYGANCg0KYGBge3J9DQoNCmBgYA0KDQpgYGB7cn0NCg0KYGBgDQoNCmBgYHtyfQ0KDQpgYGANCg0KYGBge3J9DQoNCmBgYA0KDQpgYGB7cn0NCg0KYGBg